Computer applications used in large-scale networks are evolving from a monolithic architecture that provides applications for use by many users (e.g., web applications) to a microservice architecture that features many small components. This allows applications to be easily scaled by providing new or updated components without requiring rewrite or modification of the entire application. However, as the number of components or services in an application increases, the management overhead regarding fixing problems and integrating changes in the overall applications greatly increases, as well.
During the development of application software, developers and programmers fix bugs and Quality Assurance (QA) engineers verify the fixes, often rejecting or opening more bugs. This can be a highly iterative process with multiple versions created by the developers until the software quality is satisfactory. In complex applications, a fix applied by a developer may need to be performed and applied to multiple components of the system, requiring the QA engineer and developer to manually configure and replace multiple parts of the system in order to reproduce issues and verify fixes. This process is time consuming, and also error prone in that it creates scenarios where bugs are not reproduced by developers, or the configuration verified by the QA is not the correct one.